// 《围棋》作者版权所有。版权所有。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package syscall

// RawConn是原始网络连接。
type RawConn interface {
	// 控件在基础连接的文件
	// 描述符或句柄上调用f。
	// 文件描述符fd保证在执行
	// f时保持有效，但在f返回后不保持有效。
	Control(f func(fd uintptr)) error

	// Read调用基础连接文件
	// 描述符或句柄上的f；f应尝试从
	// 文件描述符读取。
	// 如果f返回true，则Read返回。否则Read阻塞
	// 等待连接准备好读取，
	// 再次尝试。
	// 文件描述符保证在执行f 
	// 时保持有效，但在f返回后不保持有效。
	Read(f func(fd uintptr) (done bool)) error

	// 写就像读，只是为了写。
	Write(f func(fd uintptr) (done bool)) error
}

// Conn由网络和操作系统包中的某些类型实现，以提供对底层文件描述符或句柄的访问。
type Conn interface {
	// SyscallConn返回原始网络连接。
	SyscallConn() (RawConn, error)
}
